package com.prsistema.DAO;

import com.prsistema.utilitarias.Empresa;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class DAOCliente {
    
    private Connection conector;

    public DAOCliente(Connection conector) {
        this.conector = conector;
    }
    
    public boolean insert(Empresa cliente) {
        PreparedStatement pstm = null;
        try {
            final String sql = "insert into cliente (clie_nome, clie_cnpj , clie_inscEstadual , clie_cep, clie_estado, clie_municipio," 
	    + "clie_endereco, clie_bairro, clie_complemento, clie_email, clie_telefone, clie_celular ,clie_responsavel, clie_infoAdd) "
            + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            pstm = conector.prepareStatement(sql);

            pstm.setString(1, cliente.getNome());
            pstm.setString(2, cliente.getCnpj());
            pstm.setString(3, cliente.getInscEstadual());
            pstm.setString(4, cliente.getCep());
            pstm.setString(5, cliente.getEstado());
            pstm.setString(6, cliente.getMunicipio());
            pstm.setString(7, cliente.getEndereco());
            pstm.setString(8, cliente.getBairro());
            pstm.setString(9, cliente.getComplemento());
            pstm.setString(10, cliente.getEmail());
            pstm.setString(11, cliente.getTelefone());
            pstm.setString(12, cliente.getCelular());
            pstm.setString(13, cliente.getResponsavel());
            pstm.setString(14, cliente.getInfoAdd());
            
            pstm.executeUpdate();
            pstm.close();
            
            return true;

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao salvar no Banco de Dados: " + ex);
            return false;
        }
    }
    
    public boolean delete(long id) {
        PreparedStatement pstm = null;
        try {
            final String sql = "delete from cliente where clie_id=(?)";
            pstm = this.conector.prepareStatement(sql);
            pstm.setLong(1, id);
            pstm.executeUpdate();
            pstm.close();
            return true;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Erro ao excluir: " + erro);
            return false;
        }
    }
    
    public boolean update(Empresa cliente){
        PreparedStatement pstm = null;
        try {
            final String sql = "update cliente set clie_nome=(?), clie_cnpj=(?), clie_inscEstadual=(?), clie_cep=(?), clie_estado=(?), "
                    + "clie_municipio=(?), clie_endereco=(?), clie_bairro=(?), clie_complemento=(?), clie_email=(?), clie_telefone=(?), "
                    + "clie_celular=(?) ,clie_responsavel=(?), clie_infoAdd=(?) where clie_id=(?)";
     
            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, cliente.getNome());
            pstm.setString(2, cliente.getCnpj());
            pstm.setString(3, cliente.getInscEstadual());
            pstm.setString(4, cliente.getCep());
            pstm.setString(5, cliente.getEstado());
            pstm.setString(6, cliente.getMunicipio());
            pstm.setString(7, cliente.getEndereco());
            pstm.setString(8, cliente.getBairro());
            pstm.setString(9, cliente.getComplemento());
            pstm.setString(10, cliente.getEmail());
            pstm.setString(11, cliente.getTelefone());
            pstm.setString(12, cliente.getCelular());
            pstm.setString(13, cliente.getResponsavel());
            pstm.setString(14, cliente.getInfoAdd());
            pstm.setLong(15, cliente.getId());
            pstm.executeUpdate();
            pstm.close();
            return true;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Erro ao alterar: " + erro);
            return false;
        }
    }
    
    public ArrayList<Empresa> selectAll() {
        ArrayList<Empresa> clientes = new ArrayList<Empresa>();
        PreparedStatement pstm = null;
        
        try {
            String sql = "select * from cliente order by clie_nome";
            pstm = this.conector.prepareStatement(sql);
            ResultSet resultado = pstm.executeQuery();

            while (resultado.next()) {
                Empresa clie = new Empresa();

                clie.setId(resultado.getLong("clie_id"));
                clie.setNome(resultado.getString("clie_nome"));
                clie.setCnpj(resultado.getString("clie_cnpj"));
                clie.setInscEstadual(resultado.getString("clie_inscEstadual"));
                clie.setCep(resultado.getString("clie_cep"));
                clie.setEstado(resultado.getString("clie_estado"));
                clie.setMunicipio(resultado.getString("clie_municipio"));
                clie.setEndereco(resultado.getString("clie_endereco"));
                clie.setBairro(resultado.getString("clie_bairro"));
                clie.setComplemento(resultado.getString("clie_complemento"));
                clie.setEmail(resultado.getString("clie_email"));
                clie.setTelefone(resultado.getString("clie_telefone"));
                clie.setCelular(resultado.getString("clie_celular"));
                clie.setResponsavel(resultado.getString("clie_responsavel"));
                clie.setInfoAdd(resultado.getString("clie_infoAdd"));

                clientes.add(clie);
            }

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro ao carregar dados: " + ex);
            clientes = null;
        } finally {
            return clientes;
        }
    }
    
   
}
